home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / wink / source / scrn.asm < prev    next >
Encoding:
Assembly Source File  |  1991-10-19  |  6.7 KB  |  386 lines

  1. extrn    btm_ptr,Line_no,Cur_X,Cur_Y,top_ptr,chk_ptr
  2. extrn    cke_ptr,ent_ptr,Line_X,Line_Y,CONTRL,TAB,lin_ptr
  3. extrn    Cnv_ptr,sprintf,Nxt_line,Dsp_vram,Get_key,ins_chr
  4.  
  5. ;************************************
  6. ;void    Set_vram()
  7. ;************************************
  8.     public    Set_vram
  9. Set_vram proc    near
  10.     push    ebp
  11.     mov    ebp,esp
  12.     sub    esp,28
  13.     push    ebx
  14.     push    esi
  15.     push    edi
  16.  
  17. ;    int      ch,i,x,y,col,ln,ol;
  18. ;    register UCHAR   *vp;
  19. ;    register LONG    ptr;
  20. ;    UCHAR    *sp;
  21.  
  22. ;    sp = (Wind_flg != FALSE ? dram : vram);
  23.  
  24.     mov    eax,offset dram
  25.     cmp    Wind_flg,0
  26.     jne    SetVr1
  27.     mov    eax,offset vram
  28. SetVr1:
  29.     mov    [ebp-28],eax
  30. ReSetVr:
  31.  
  32. ;    memset(sp,0,MAX_X * MAX_Y * 2);
  33.  
  34.     xor    eax,eax
  35.     mov    ecx,1080
  36.     mov    edi,[ebp-28]
  37.     rep    stosd
  38.  
  39. ;    ptr = top_ptr;
  40.     mov    esi,top_ptr
  41.  
  42. ;    col = COLOR;
  43.     movzx    edx,COLOR
  44.     mov    [ebp-16],edx        ; col
  45.  
  46. ;    ol = (-1);
  47.     mov    dword ptr [ebp-24],-1
  48.  
  49. ;    for ( y = 0 ; y < MAX_Y ; y++ )
  50. ;    Line_tmp[y] = (-1);
  51.     mov    eax,-1
  52.     mov    ecx,27
  53.     mov    edi,offset Line_tmp
  54.     rep    stosd
  55.  
  56. ;    for ( ln = y = 0 ; y < MAX_Y ; y++ ) {
  57.     sub    eax,eax
  58.     mov    [ebp-12],eax        ; y
  59.     mov    [ebp-20],eax        ; ln
  60.  
  61. SetYLop:
  62.  
  63. ;        vp = sp + (MAX_X * 2) * y;
  64.     mov    edi,[ebp-12]
  65.     lea    edi,[eax+eax*4]
  66.     shl    edi,5
  67.     add    edi,[ebp-28]
  68.  
  69. ;    if ( ln == ol )
  70. ;        Line_tmp[y] = (-1);
  71. ;    else
  72. ;        ol = Line_tmp[y] = ln;
  73.  
  74.     mov    eax,[ebp-20]
  75.     cmp    eax,[ebp-24]
  76.     jne    SetNxt1
  77.     mov    eax,[ebp-12]
  78.     mov    dword ptr Line_tmp[eax*4],-1
  79.     jmp    SetNxt2
  80. SetNxt1:
  81.     mov    eax,[ebp-12]
  82.     mov    edx,[ebp-20]
  83.     mov    Line_tmp[eax*4],edx
  84.     mov    [ebp-24],edx
  85. SetNxt2:
  86.  
  87. ;    for ( x = 0 ; x < MAX_X ; ) {
  88.     sub    ebx,ebx
  89.  
  90. ;        if ( chk_ptr != ERR ) {
  91. ;        if ( ptr >= chk_ptr && ptr < cke_ptr )
  92. ;            col = ((COLOR - 1)&0x0F) | 0x10;
  93. ;        else
  94. ;            col = COLOR;
  95. ;        }
  96.     mov    eax,chk_ptr
  97.     cmp    eax,-1
  98.     je    SetNxt3
  99.  
  100.     cmp    eax,esi
  101.     jnbe   SetNx31
  102.     cmp    esi,cke_ptr
  103.     jnb    SetNx31
  104.  
  105.     movzx    eax,COLOR
  106.     dec    eax
  107.     and    eax,15
  108.     or    al,16
  109.     jmp    SetNx32
  110. SetNx31:
  111.     movzx    eax,COLOR
  112. SetNx32:
  113.     mov    [ebp-16],eax
  114. SetNxt3:
  115.  
  116. ;        if ( ptr == ent_ptr ) {
  117. ;        Line_X = Cur_X = x;
  118. ;        Cur_Y = y;
  119. ;        Line_Y = ln;
  120. ;        }
  121.     cmp    esi,ent_ptr
  122.     jne    SetNxt4
  123.     mov    Cur_X,ebx
  124.     mov    eax,edi
  125.     mov    word ptr Line_X,ax
  126.     mov    eax,-12[ebp]
  127.     mov    Cur_Y,eax
  128.     mov    ax,word ptr -20[ebp]
  129.     mov    word ptr Line_Y,ax
  130. SetNxt4:
  131.  
  132. ;        if ( ptr >= btm_ptr ) {
  133. .L05ba:
  134.     cmp    ebx,btm_ptr
  135.     jb     05dc
  136. ;        vp = Set_Str(sp,vp,col,"[EOF]");
  137.     push   offset _mwLITERALS+16
  138.     push   dword ptr -16[ebp]
  139.     push   esi
  140.     push   dword ptr -28[ebp]
  141.     call   0044
  142.     xchg   eax,esi
  143.     add    esp,16
  144. ;        goto ENDOF;
  145.     jmp    0778
  146. ;        }
  147. ;        ch = *Cnv_ptr(ptr);
  148. .L05dc:
  149.     push   ebx
  150.     call   Cnv_ptr
  151.     movzbl eax,[eax]
  152.     mov    -4[ebp],eax
  153.     add    esp,4
  154. ;        if ( ch == '\x0D' ) {
  155.     cmp    eax,13
  156.     jne    0612
  157. ;        if ( CONTRL > 0 ) {
  158.     cmp    dword ptr CONTRL,0
  159.     jle    0607
  160. ;            *(vp++) = (col-2)&0x0F;
  161.     mov    al,-16[ebp]
  162.     sub    al,2
  163.     and    al,15
  164.     mov    [esi],al
  165.     inc    esi
  166. ;            *(vp++) = CRCHR;
  167.     mov    byte ptr [esi],31
  168.     inc    esi
  169. ;        }
  170. ;        ptr += 2;
  171. .L0607:
  172.     add    ebx,2
  173. ;        ln++;
  174.     inc    dword ptr -20[ebp]
  175. ;        break;
  176.     jmp    072d
  177. ;        } else if ( ch == '\t' ) {
  178. .L0612:
  179.     cmp    dword ptr -4[ebp],9
  180.     jne    06a6
  181. ;        i = ((x + TAB) / TAB) * TAB - x;
  182.     mov    eax,edi
  183.     add    eax,TAB
  184.     cwd
  185.     idiv   dword ptr TAB
  186.     imul   eax,TAB
  187.     sub    eax,edi
  188.     mov    -8[ebp],eax
  189. ;        if ( CONTRL > 1 && i-- > 0 ) {
  190.     cmp    dword ptr CONTRL,1
  191.     jle    0654
  192.     dec    dword ptr -8[ebp]
  193.     dec    eax
  194.     jl     0654
  195. ;            *(vp++) = (col-1)&0x0F;
  196.     mov    al,-16[ebp]
  197.     dec    eax
  198.     and    al,15
  199.     mov    [esi],al
  200.     inc    esi
  201. ;            *(vp++) = TABCHR;
  202.     mov    byte ptr [esi],9
  203.     inc    esi
  204. ;            x++;
  205.     inc    edi
  206. ;        }
  207. ;        if ( CONTRL > 1 ) {
  208. .L0654:
  209.     cmp    dword ptr CONTRL,1
  210.     jle    0683
  211. ;            while ( i-- > 0 && x < MAX_X ) {
  212. .L065d:
  213.     mov    eax,-8[ebp]
  214.     dec    dword ptr -8[ebp]
  215.     dec    eax
  216.     jl     0727
  217.     cmp    edi,80
  218.     jnl    0727
  219. ;            *(vp++) = (col-1)&0x0F;
  220.     mov    al,-16[ebp]
  221.     dec    eax
  222.     and    al,15
  223.     mov    [esi],al
  224.     inc    esi
  225. ;            *(vp++) = '.';
  226.     mov    byte ptr [esi],46
  227.     inc    esi
  228. ;                x++;
  229.     inc    edi
  230.     jmp    065d
  231. ;            }
  232. ;        } else {
  233. ;            while ( i-- > 0 && x < MAX_X ) {
  234. .L0683:
  235.     mov    eax,-8[ebp]
  236.     dec    dword ptr -8[ebp]
  237.     dec    eax
  238.     jl     0727
  239.     cmp    edi,80
  240.     jnl    0727
  241. ;            *(vp++) = col;
  242.     mov    al,-16[ebp]
  243.     mov    [esi],al
  244.     inc    esi
  245. ;            *(vp++) = ' ';
  246.     mov    byte ptr [esi],32
  247.     inc    esi
  248. ;                x++;
  249.     inc    edi
  250.     jmp    0683
  251. ;            }
  252. ;        }
  253. ;        ptr++;
  254. ;        } else if ( iskanji(ch) && iskan2(ptr) != FALSE ) {
  255. .L06a6:
  256.     mov    eax,-4[ebp]
  257.     cmp    eax,129
  258.     jl     06b7
  259.     cmp    eax,159
  260.     jle    06c8
  261. .L06b7:
  262.     mov    eax,-4[ebp]
  263.     cmp    eax,224
  264.     jl     071a
  265.     cmp    eax,252
  266.     jnle   071a
  267. .L06c8:
  268.     push   ebx
  269.     call   0000
  270.     add    esp,4
  271.     and    eax,eax
  272.     je     071a
  273. ;        if ( x != (MAX_X - 1) ) {
  274.     cmp    edi,79
  275.     je     070a
  276. ;#ifdef    TOWNS
  277. ;            *(vp++) = col|0x40;
  278.     mov    al,-16[ebp]
  279.     or     al,64
  280.     mov    [esi],al
  281.     inc    esi
  282. ;            *(vp++) = ch; ptr++;
  283.     mov    al,-4[ebp]
  284.     mov    [esi],al
  285.     inc    esi
  286.     inc    ebx
  287. ;            *(vp++) = col|0x80;
  288.     mov    al,-16[ebp]
  289.     or     al,128
  290.     mov    [esi],al
  291.     inc    esi
  292. ;            *(vp++) = *Cnv_ptr(ptr++);
  293.     mov    eax,ebx
  294.     inc    ebx
  295.     push   eax
  296.     call   Cnv_ptr
  297.     mov    al,[eax]
  298.     mov    [esi],al
  299.     inc    esi
  300. ;#else
  301. ;            i = (ch << 8); ptr++;
  302. ;            i |= (*Cnv_ptr(ptr++) & 0xff);
  303. ;            i = sjistojis(i);
  304. ;            *(vp++) = col|0x40;
  305. ;            *(vp++) = i >> 8;
  306. ;            *(vp++) = col|0x80;
  307. ;            *(vp++) = i & 0xff;
  308. ;#endif
  309. ;            x += 2;
  310.     add    edi,2
  311.     add    esp,4
  312.     jmp    0558
  313. ;        } else {
  314. ;            *(vp++) = col;
  315. .L070a:
  316.     mov    al,-16[ebp]
  317.     mov    [esi],al
  318.     inc    esi
  319. ;            *(vp++) = 0x1C;
  320.     mov    byte ptr [esi],28
  321.     inc    esi
  322. ;            x++;
  323.     inc    edi
  324.     jmp    0558
  325. ;        }
  326. ;        } else {
  327. ;        *(vp++) = col;
  328. .L071a:
  329.     mov    al,-16[ebp]
  330.     mov    [esi],al
  331.     inc    esi
  332. ;        *(vp++) = ch;
  333.     mov    al,-4[ebp]
  334.     mov    [esi],al
  335.     inc    esi
  336. ;        x++; ptr++;
  337.     inc    edi
  338. .L0727:
  339.     inc    ebx
  340.     jmp    0558
  341. .L072d:
  342.     inc    dword ptr -12[ebp]
  343.     jmp    0518
  344. ;        }
  345. ;    }
  346. ;    }
  347. ;    if ( ptr <= lin_ptr ) {
  348. .L0735:
  349.     cmp    ebx,lin_ptr
  350.     jnbe   0778
  351. ;    for ( i = 0 ; top_ptr < btm_ptr && i < 5 ; i++ ) {
  352.     mov    dword ptr -8[ebp],0
  353. .L0744:
  354.     mov    eax,top_ptr
  355.     cmp    eax,btm_ptr
  356.     jnb    04ce
  357.     cmp    dword ptr -8[ebp],5
  358.     jnl    04ce
  359. ;        top_ptr = Nxt_line(top_ptr);
  360.     push   eax
  361.     call   Nxt_line
  362.     mov    top_ptr,eax
  363. ;        Line_no++;
  364.     inc    dword ptr Line_no
  365.     inc    dword ptr -8[ebp]
  366.     add    esp,4
  367.     jmp    0744
  368. ;    }
  369. ;    goto RESET;
  370. ;    }
  371. ;ENDOF:
  372. ;    if ( Wind_flg != FALSE )
  373. .L0778:
  374.     cmp    word ptr @SCRN+4336,0
  375.     je     0787
  376. ;    Set_vram_sub();
  377.     call   0224
  378. ;}
  379. .L0787:
  380.     pop    edi
  381.     pop    esi
  382.     pop    ebx
  383.     leave
  384.     rets
  385. Set_vram    endp
  386.